﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data.Sql;
using Microsoft.Practices.EnterpriseLibrary.Common;
using System.Configuration;
using Insifo.BE.Gen;

namespace Insifo.DL.Gen
{
    public class DLBanco
    {
        #region  Members


        /// <summary>
        /// Método obtiene obtiene la Lista las Bancos
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet Listar(BEBanco pbe)
        {
            DataSet ds = new DataSet();
            //List<BEBanco> lst = new List<BEBanco>();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Banco_Listar");
            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@as_CodigoBanco", DbType.String, pbe.CodigoBanco);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@ai_Pagina", DbType.Int32, pbe.Pagina);
                ds = sqlDB.ExecuteDataSet(dbCmd);


            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                dbCmd.Dispose();
            }
            return ds;
        }

        /// <summary>
        /// Método obtiene las Bancos
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet Listar_Sel(BEBanco pbe)
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Banco_Listar_Sel");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {                
                //if (dbCmd.Connection.State == ConnectionState.Open)
                    //dbCmd.Connection.Close();
                dbCmd.Dispose();
            }
            return ds;
        }

        /// <summary>
        /// Método obtiene las Bancos
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        public DataSet ListarPorUsuario(string pstrUsuario)
        {
            DataSet ds = new DataSet();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Banco_X_Usuario_Listar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@as_CodigoUsuario", DbType.String, pstrUsuario);
                ds = sqlDB.ExecuteDataSet(dbCmd);
            }
            catch (Exception)
            {
                throw;
            }

            finally
            {
                //if (dbCmd.Connection.State == ConnectionState.Open)
                //dbCmd.Connection.Close();
                dbCmd.Dispose();
            }
            return ds;
        }

        /// <summary>
        /// Método obtiene una Banco
        /// </summary>
        /// <returns>Devuelve un objeto</returns>
        public BEBanco Obtener(BEBanco pbe)
        {
            BEBanco be = new BEBanco();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Banco_Obtener");
            dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
            try
            {
                sqlDB.AddInParameter(dbCmd, "@ai_IdBanco", DbType.String, pbe.IdBanco);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdBanco = DBValue.Get<int>(reader, "IdBanco");
                        be.IdPersona = DBValue.Get<int>(reader, "IdPersona") == 0 ? (int?)null : DBValue.Get<int>(reader, "IdPersona"); 
                        be.CodigoBanco = DBValue.Get<String>(reader, "CodigoBanco");
                        be.Descripcion = DBValue.Get<String>(reader, "Descripcion");
                        be.CodigoInterfaseAFP = DBValue.Get<String>(reader, "CodigoInterfaseAFP");
                        be.NombreRepresentante = DBValue.Get<String>(reader, "NombreRepresentante");


                        be.Estado = DBValue.Get<String>(reader, "Estado");
                        be.UsuarioModificacion = DBValue.Get<String>(reader, "UsuarioModificacion");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        be.UsuarioCreacion = DBValue.Get<String>(reader, "UsuarioCreacion");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");

                        break;
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                //if (dbCmd.Connection.State == ConnectionState.Open)
                //dbCmd.Connection.Close();
                dbCmd.Dispose();
            }
            return be;
        }

        /// <summary>
        /// Método Inserta un Nivel Alerta
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BEBanco Insertar(BEBanco pbe)
        {
            BEBanco be = new BEBanco();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Banco_Insertar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                sqlDB.AddInParameter(dbCmd, "@ai_IdPersona", DbType.Int32, pbe.IdPersona);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoBanco", DbType.String, pbe.CodigoBanco);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoInterfaseAFP", DbType.String, pbe.CodigoInterfaseAFP);
                sqlDB.AddInParameter(dbCmd, "@as_NombreRepresentante", DbType.String, pbe.NombreRepresentante);


                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioCreacion", DbType.String, pbe.UsuarioCreacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdBanco = DBValue.Get<Int32>(reader, "IdBanco");
                        be.FechaCreacion = DBValue.Get<DateTime>(reader, "FechaCreacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");

                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }



        /// <summary>
        /// Método Actualiza un Nivel Alerta
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BEBanco Actualizar(BEBanco pbe)
        {
            BEBanco be = new BEBanco();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Banco_Actualizar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;

                sqlDB.AddInParameter(dbCmd, "@ai_IdBanco", DbType.Int32, pbe.IdBanco);
                sqlDB.AddInParameter(dbCmd, "@ai_IdPersona", DbType.Int32, pbe.IdPersona);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoBanco", DbType.String, pbe.CodigoBanco);
                sqlDB.AddInParameter(dbCmd, "@as_Descripcion", DbType.String, pbe.Descripcion);
                sqlDB.AddInParameter(dbCmd, "@as_CodigoInterfaseAFP", DbType.String, pbe.CodigoInterfaseAFP);
                sqlDB.AddInParameter(dbCmd, "@as_NombreRepresentante", DbType.String, pbe.NombreRepresentante);




                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdBanco = DBValue.Get<Int32>(reader, "IdBanco");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }


        /// <summary>
        /// Método Actualiza el Estado Nivel Alerta
        /// </summary>
        /// <returns>Devuelve una entidad</returns>
        public BEBanco Eliminar(BEBanco pbe)
        {
            BEBanco be = new BEBanco();
            SqlDatabase sqlDB = new SqlDatabase(CadenaConexion.Obtener());
            DbCommand dbCmd = sqlDB.GetStoredProcCommand("uSP_INSIFO_GEN_Banco_Eliminar");

            try
            {
                dbCmd.CommandTimeout = CadenaConexion.CommandTimeout;
                //dbCmd.Transaction = Transaction.InnerDbTransaction; //Para administrar la transaccion
                //dbCmd.Connection = Transaction.Connection;  //Para administrar la conecion de la transaccion
                sqlDB.AddInParameter(dbCmd, "@ai_IdBanco", DbType.Int32, pbe.IdBanco);
                sqlDB.AddInParameter(dbCmd, "@as_Estado", DbType.String, pbe.Estado);
                sqlDB.AddInParameter(dbCmd, "@as_UsuarioModificacion", DbType.String, pbe.UsuarioModificacion);

                using (IDataReader reader = sqlDB.ExecuteReader(dbCmd))
                {
                    while (reader.Read())
                    {
                        be.IdBanco = DBValue.Get<Int32>(reader, "IdBanco");
                        be.FechaModificacion = DBValue.Get<DateTime>(reader, "FechaModificacion");
                        //Error
                        be.Error = DBValue.Get<Int32>(reader, "CodigoError");
                        be.Mensaje = DBValue.Get<String>(reader, "MensajeError");
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                throw e;
            }

            finally
            {
                dbCmd.Dispose();
            }
            return be;
        }


        #endregion  Members
    }
}
